1886-BHV-01 S.10-12

Komtek 1: Verbesserter Zeichengenerator

Helmut Bernhardt

Wer seinen Komtek 1 nach den im Hardware-Sonderheft Nov.85 beschriebenen Umbauten als relativ komfortable Schreibmaschine nutzt, kann sich eigentlich nur noch an den amerikanischen Sonderzeichen, die zudem auch noch falsch sind, anstelle der deutschen Umlaute auf dem Bildschirm stören. Dieser Mißstand wird nun behoben. Voraussetzung ist, daß man jemanden kennt, der ein 2732 eprommen kann.

Zeichengenerator im Komtek 1

Bei der für den Komtek 1 wegen mangelnder Hardware-Unterlagen üblichen Wühlarbeit zum Durchschauen der Schaltung stellte sich die in Abb.1 wiedergegebene Beschaltung des 2732-Zeichengenerator-EPROMs heraus. Weitere Erkenntnisse über die Organisation (Zuordnung von EPROM-Adressen und -Daten zu Bildschirmpositionen) konnten durch Herausnehmen des EPROMs, Hochbiegen und An-Masse-Legen einzelner Pins und wieder Hineinstecken des EPROMs in den Sockel, und Interpretation der veränderten Bildschirmdarstellung erhalten werden. Letzte Unsicherheiten ließen sich durch Auslesen des Inhaltes des Zeichengerators mit einem EPROMer ausräumen (für diesen Dienst an der Digitaltechnik sei Arnulf Sopp herzlichst gedankt).

Wie sich die verschiedenen Beobachtungen und die Untersuchung des Hexdumps aus dem EPROM zu den folgenden Vorstellungen zusammenfügen, möchte ich mir hier darzustellen ersparen (nicht nur, weil es wohl niemanden interessiert, sondern hauptsächlich, weil ich dazu keine Lust habe). Wichtig ist nur das Ergebnis, und das rechtfertigt den Schreibaufwand.

Danach ist eine Druckposition für ein Zeichen auf dem Bildschirm in 7 waagerechte und 16 senkrechte Punkte aufgeteilt (bei TRS80 und GENIE 6x12). Der Inhalt einer waagerechten Dotreihe entspricht von links nach rechts den Bits D6 bis D0 im jeweiligen Byte im Zeichengenerator. Die EPROM-Adreßeingänge A0 bis A2 adressieren dabei eine von 8 Dotreihen (8 aufeinanderfolgende Bytes im EPROM) in entweder der oberen oder der unteren Hälfte einer Druckposition während durch den Adreßeingang A11 vorgegeben ist, welche Hälfte angesteuert wird.

An die Adreßeingänge A3 bis A10 sind die Daten D0 bis D7 des Video-RAMs geführt, Ensprechend dem ASCII-Code 00-FF liegen also hintereinander in den unteren 2K des EPROM-Adreßbereichs 256 Gruppen von je 8 Bytes, die dem Bildschirminhalt der oberen Hälfte einer Druckposition entsprechen. Analog sind die Informationen für die untere Hälfte einer Druckposition mit einem Offset von 2048 Adressen in den oberen 2K des EPROMs abgelegt.

Zur Darstellung von Zeichen mit ASCII-Codes bis 7FH wird dabei nur die obere Hälfte einer Druckposition genutzt. Die meisten Zeichen werden innerhalb einer 5x7-Matrix dargestellt. Die untere der 8 waagerechten und 2 seitliche senkrechte Dotreihen werden nicht genutzt. Nur bei Unterlängen wird auch die 8. waagerechte Reihe mitbenutzt. Da diese aber für eine echte Unterlänge nicht ausreicht, werden Zeichen wie "g" und "p" einfach hochgeschoben.

Die unteren Hälften der Druckpositionen werden nur bei den Pixelgraphikzeichen (ASCII-Codes größer 7FH) benutzt. Da die Teilung der 16 wagerechten Dotzeilen durch 3 und die der 7 senkrechten durch 2 keine ganzzahligen Werte ergibt, mußte hingenommen werden, daß die Blockgraphik entsprechend ungleichmäßig aussieht. Die Blockgraphik war aber leztendlich nicht Gegenstand der Kritik sondern der Satz der Zeichen mit ASCII-Codes bis 7FH.

Es ist nicht einzusehen, warum diese Zeichen nicht auch die untere Hälfte der Druckposition mitbenutzen sollen. Es muß nicht sein, daß ein Buchstabe an einem Graphikzeichen in der Zeile darüber festklebt. Dafür müssen nur alle Zeichen um 2 Dotzeilen in der Matrix nach unten geschoben werden, d.h. im EPROM müssen alle Bytes in eine um 2 höhere Adresse verschoben werden.

Innerhalb der 8 Bytes für ein Zeichen wird das erste Byte in die Adresse des 3. Bytes, das 2. Byte in die Adresse des 4. Bytes u.s.w. verschoben. Die freigewordenen ersten beiden Bytes werden mit 00H aufgefüllt. Das 7. und 8. Byte werden aber nicht einfach um zwei Adressen verschoben, sondern um 2048-8 Adressen, damit sie nicht in die ersten beiden Bytes des nächsten Zeichens sondern in die oberen 2 Dotzeilen der unteren Hälfte der Druckposition des gleichen Zeichens gelangen. Diese Prozedur wird allerdings nur mit dem Adreßbereich 0-1K (und 2-3K) durchgeführt, weil die in den anderer 2K des EPROMs untergebrachten Informationen die der Blockgrahik-Zeichen sind.

Damit sind die Zeichen zwar alle von der Zeile darüber abgerückt worden, hübscher sind sie dadurch noch nicht geworden. Deshalb müssen die Zeichen für die Umlaute, die Zeichen mit Unterlängen und alle sonstigen unschönen Gebilde neu gestaltet werden. Das ist aber eine enorme Arbeit, die zu verrichten bei Bestehen eines brauchbaren Zeichensatzes (z.B. der des GENIE) nicht ganz einzusehen ist. Der Zeichensatz im GENIE ist aber etwas anders organisiert. Erstens werden die Grafikzeichen nicht über den Zeichengenerator sondern per Hardware erzeugt, weshalb man dort mit einem 2716-EPROM auskommt. Zweitens wird ein Zeichen durch 16 aufeinanderfolgende Bytes im EPROM dargestellt, wovon nur die ersten 12 Bytes (entsprechend 12 Dotreihen pro Druckposition) benutzt werden. Und drittens ist die Zuordnung der Bits eines Bytes im Zeichengenerator zu den Dots einer Dotreihe genau umgekehrt, d.h. die niederwertigen Bits representieren die linken Dots in der Reihe, was beim Komtek ungekehrt ist.

Da mir bekannt war, daß Arnulf Sopp schon einen verbesserten Zeichensatz für den GENIE erstellt hat, der alle Zeichen um 2 Dots herunterrückt und die Großbuchstaben Ä, Ö und Ü auch tatsächlich als Großbuchstaben erscheinen läßt, und ich nicht nur zu bequem bin sondern auch Respekt vor den Fähigkeiten anderer, die das bedeutend besser können, habe, schmarotzte ich einfach von Arnulfs Arbeit und bat ihn, mir seinen Zeichensatz in den des Komtek einzumassieren. Das ist ihm mit der beiliegenden eleganten Soppftware auch hervorragend gelungen.

Nur einen Haken hat das ganze Projekt. Arnulfs Zeichensatz sieht für die ASCII- Codes 00-1F nicht die für den GENIE üblichen fernöstlichen Gebilde sondern die diesen Codes entsprechenden Hexzahlen vor. Die werden, wenn im GENIE eine ent- sprechende Änderung vorgenommem wird, dann auch im Bildschirm dargestellt, wenn eine Zahl zwischen 00 und 1F in den Bildwiederholseicher gepoked wird.

Beim Komtek ist eine entsprechende Änderung nicht möglich, bzw. ich habe sie noch nicht herausgefunden. Deshalb erscheinen beim Arbeiten im Level-II-Basic, das anstelle der ASCII-Codes 40-5F die Codes 00-1F an den Bildwiederholspeicher ausgibt, dort anstelle der Großbuchstaben die Arnu1f'schen übereinander gestellten Hexzahlen auf dem Bildschirm. Im DOS und Disk-Basic ist dies nicht mehr der Fall.

Um im Level-II-Basic auch erkennbare Zeichen auf dem Bildschirm zu haben, müßten deshalb anstelle der ansonsten sehr informativen Hexzahlen für die ASCII-Codes 00-1F lieber die Zeichen mit den ASCII-Codes 40-5F verwendet werden. Für Bastler, die wegen häuiger Hardware-Eingriffe gelegentlich auf ihre Floppy-Laufwerke verzichten müssen und dann für Testzwecke auf Level-II-Basic angewiesen sind, kann das doch von Bedeutung sein.

Helmut Bernhardt

Und hier Arnulfs Soppftwärechen

52000001ORG5200h
0002
52002100A00003startLDHL,0a000h;ab hier Komtek-Zeichensatz
52031100800004LDDE,8000h;ab hier GENIE-Zeichensatz
520606B00005LDB,80h;128 Zeichen mit 16 Bytes
5208C50006loop1PUSHBC;Zähler retten
520906080007LDB,8;Zähler 8 Bytes(1/2 Zeile)
520BCD24520008loop2CALLmodify;Komtek-Zeichens. verändern
520E10FB0009DJNZloop2;8 von 16 Bytes
521001F8070010LDBC,07f8h;untere Hälfte d. Zeichens.
5213090011ADDHL,BC;Adresse untere Hälfte
5214040012INCB;B <- Zähler 8 Bytes
5215CD24520013loop3CALLmodify;untere Hälfte modifizieren
421810FB0014DJNZloop3;8 Bytes der unteren Hälfte
521AB70015ORA;Cy löschen
521B0100080016LDBC,0800h;jetzt 2K tiefer
521EED420017SBCHL,BC;neue Komtek-Adresse
5220C10018POPBC;Zähler 128*16
522110E50019DJNZloop1;bis 128 Zeichen fertig
5223C90020RET;ins Betriebssystem
0021
5224C50022modifyPUSHBC;Bytezähler retten
522506080023LDB,8;8 Bit pro Byte
52271A0024LDA,(DE);GENIE-Byte
5228070025loop4RLCA;zur Spiegelung
5229CB190026RRC;Byte rotieren
522B10FB0027DJNZloop4;bis ein Byte gespiegelt
522D710028LD(HL),C;neues Komtek-Zeichen
522E230029INCHL;nächste Komtek-Stelle
522F130030INCDE;nächste GENIE-Stelle
5230C10031POPBC;Bytezähler restaurieren
5231C90032RET;ins Hauptprogramm
0033
52000034ENDstart;dort Einsprung